package damas;

import damas.gui.DamasGui;
import damas.logicaYcontroladores.DamasLogica;
import damas.modelo.DamasEstado;
import damas.modelo.DamasModelo;
import damas.modelo.DamasModeloImplementacion;
import damas.reglas.ReglaMover;
import engines.MinMaxABSearchEngine;
import framework.AdversarySearchEngine;
import framework.IRule;
import framework.SearchProblem;

import java.util.LinkedList;
import java.util.List;

/**
 * Clase que lanza la aplicaci�n
 *
 * @author Sim�n Emmanuel Guti�rrez Brida
 * @version 0.1
 */
public class Damas
{
    static private List<IRule<DamasEstado>>           reglas   = null;
    static private DamasEstado                        estado   = null;
    static private SearchProblem<DamasEstado>         problema = null;
    static private DamasGui                           gui      = null;
    static private DamasModelo                        modelo   = null;
    static private DamasLogica                        logica   = null;
    static private AdversarySearchEngine<DamasEstado> ia       = null;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        inicializarComponentes();
        gui.definirLogica(logica);
        gui.init();
    }

    private static void inicializarComponentes()
    {
        estado   =  new DamasEstado();
        reglas   =  new LinkedList<IRule<DamasEstado>>();
        problema =  new SearchProblem<DamasEstado>(estado, reglas);
        gui      =  new DamasGui();
        modelo   =  new DamasModeloImplementacion(estado, gui);
        ia       =  new MinMaxABSearchEngine<DamasEstado>(problema, 4);
        logica   =  new DamasLogica(modelo, ia);
        reglas.add(new ReglaMover(logica));
        estado.setLogica(logica);
    }
}
